데이터 탐색 - Data Exploration
데이터 탐색은 통계학의 기술 통계(Descriptive Statistics) 분야에 속하며, 일반적으로 EDA(Exploratory Data Analysis)라고 부른다. 기술 통계에서 '기술(Descriptive)'은 테크닉(Technique)이 아닌 '적어서 설명한다'는 의미이며, 데이터를 요약하고 설명하는 것을 목적으로 한다.
이 장에서는 기술통계의 이론적인 설명보다는 실용적인 측면을 중심으로 설명할 것이다. 이론적인 깊이가 필요한 경우 통계학 기반의 다른 책을 참고하기 바란다.
데이터 탐색 개요
데이터 탐색(EDA)은 데이터 분석의 첫 단계로, 데이터의 구조와 특성을 파악하고, 분석 방향을 설정하는 데 매우 중요하다. 데이터의 현황을 파악하지 않고 바로 모델링이나 고급 분석을 시도하면 잘못된 결론에 도달할 수 있다. EDA는 데이터의 문제점(결측치, 이상치 등)을 발견하고, 데이터의 분포와 패턴, 변수 간의 관계를 이해하는 데 중점을 둔다.
데이터 살펴보기
- 데이터의 크기(행, 열), 변수명, 데이터 타입을 확인한다.
- 데이터의 샘플(앞부분, 뒷부분)을 직접 출력해본다.
- 결측치, 이상치, 중복 데이터가 있는지 확인한다.
- 실무에서는 pandas의
head()
,info()
,describe()
,isnull().sum()
등을 자주 활용한다.
예시:
- 데이터프레임의 크기:
df.shape
- 변수명과 타입:
df.dtypes
- 결측치 확인:
df.isnull().sum()
기초 통계량 확인
- 평균, 중앙값, 최빈값, 최소/최대값, 분산, 표준편차 등 기본 통계량을 확인한다.
- 수치형 변수의 분포와 중심 경향, 산포도를 파악한다.
- 왜도(skewness), 첨도(kurtosis) 등 분포의 특성도 확인한다.
- 실무에서는
df.describe()
,df[컬럼].value_counts()
,df[컬럼].unique()
등을 활용한다.
예시:
df['age'].mean()
,df['age'].median()
,df['age'].mode()
df['age'].std()
,df['age'].min()
,df['age'].max()
데이터 시각화
- 히스토그램, 박스플롯, 산점도, 막대그래프 등 다양한 시각화 기법을 활용한다.
- 변수의 분포, 이상치, 변수 간 관계를 시각적으로 확인한다.
- 실무에서는 matplotlib, seaborn, plotly 등 다양한 시각화 라이브러리를 사용한다.
예시:
df['age'].hist()
sns.boxplot(x='gender', y='age', data=df)
sns.scatterplot(x='height', y='weight', data=df)
그룹별 분석
- 범주형 변수(성별, 지역 등)로 데이터를 그룹화하여 특성을 비교한다.
- 그룹별 평균, 합계, 비율 등 통계량을 비교한다.
- 교차분석(교차표, 피벗테이블)로 그룹 간 차이를 분석한다.
예시:
df.groupby('gender')['income'].mean()
pd.crosstab(df['gender'], df['region'])
상관관계 분석
- 변수 간 상관계수(피어슨, 스피어만 등)를 계산하여 연관성을 파악한다.
- 상관행렬을 시각화(heatmap 등)하여 전체적인 관계를 한눈에 본다.
- 다중공선성(multicollinearity) 여부도 확인한다.
예시:
df.corr()
sns.heatmap(df.corr(), annot=True)
패턴과 추세 분석
- 시간에 따른 변화(시계열), 계절성, 주기성, 이상점 등을 확인한다.
- 시계열 데이터는 라인플롯, 이동평균선 등으로 추세를 시각화한다.
예시:
df['date'] = pd.to_datetime(df['date'])
df.set_index('date')['sales'].plot()
세부 분석
- 특정 구간, 조건, 세그먼트별로 데이터를 심층 분석한다.
- 이상치의 원인, 특이 패턴의 배경 등을 추가로 탐색한다.
- 실무에서는 조건 필터링, 쿼리, 서브셋 추출 등을 자주 활용한다.
예시:
df[df['age'] > 60]
df[(df['income'] > 5000) & (df['region'] == '서울')]
가설 생성과 검증
- 데이터 탐색 과정에서 발견한 특징을 바탕으로 가설을 세운다.
- 통계적 검정(예: t-test, 카이제곱 검정 등)으로 가설을 검증한다.
- 가설이 수용/기각되는지 판단하고, 추가 분석 방향을 설정한다.
예시:
- "남성과 여성의 평균 소득에 차이가 있을까?"
scipy.stats.ttest_ind(df[df['gender']=='M']['income'], df[df['gender']=='F']['income'])
문서화와 보고
- 데이터 탐색 과정에서 발견한 주요 인사이트, 시각화 자료, 통계 결과를 정리한다.
- 분석 결과는 보고서, 프레젠테이션, 대시보드 등 다양한 형태로 공유한다.
- 실무에서는 시각화 자료와 함께, 데이터의 한계점, 추가 분석 필요성, 실질적 시사점을 명확히 기술하는 것이 중요하다.
- 반복적이고 순환적인 탐색 과정을 명확히 기록해두면, 향후 분석 재현성과 협업에 큰 도움이 된다.
추가 분석 계획
- 데이터 탐색 결과, 추가로 심층 분석이 필요한 영역을 파악한다.
- 추가 데이터 수집, 고급 분석 기법(머신러닝 등) 적용 여부를 결정한다.
- 분석 목적에 따라 다음 단계(모델링, 인과분석 등)로 자연스럽게 연결한다.
데이터 탐색(EDA)은 단순히 한 번에 끝나는 작업이 아니라, 분석 목적과 데이터 특성에 따라 반복적이고 순환적으로 이루어진다. 탐색 과정에서 발견한 인사이트는 이후의 데이터 전처리, 모델링, 결과 해석 등 모든 분석 단계에 큰 영향을 미친다. 실무에서는 데이터 탐색에 충분한 시간을 투자하는 것이 성공적인 데이터 분석의 핵심이다.